package com.jt.service;

import java.util.Date;
import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.DigestUtils;

import com.alibaba.dubbo.config.annotation.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import com.jt.util.ObjectMapperUtil;

import redis.clients.jedis.JedisCluster;

@Service
public class DubboUserServiceImpl implements DubboUserService {
	@Autowired
	private UserMapper userMapper;
	
	@Autowired
	private JedisCluster jedisCluster;

	/**
	 * 实现用户注册,用户注册时间/密码加密
	 */
	@Override
	public void saveUser(User user) {
		String md5Pass=DigestUtils.md5DigestAsHex(
				user.getPassword().getBytes());
		user.setPassword(md5Pass).setEmail(user.getPhone())
		.setCreated(new Date()).setUpdated(user.getCreated());
		userMapper.insert(user);
	}

	/**
	 * 核心业务逻辑：根据用户名和密码查询数据库
	 * 如果数据中有记录，则保存redis，之后返回uuid
	 * 如果数据库中没有记录，则返回null
	 * 
	 */
	@Override
	public String findUserByUP(User user) {
		//1.需要对密码进行加密
		String md5Pass=DigestUtils.md5DigestAsHex(
				user.getPassword().getBytes());
		user.setPassword(md5Pass);
		//2.根据对象中不为null的属性，充当where条件
		QueryWrapper<User> queryWrapper=new QueryWrapper<User>(user);
		//查询用户全部的信息
		User userDB = userMapper.selectOne(queryWrapper);
		if(userDB ==null) {
			//3.如果userDB对象为null，则表示数据库中没有该记录，则用户名和密码错误
			return null;
		}
		//4.说明用户名和密码正确
		String key=UUID.randomUUID().toString();
		//5.为了保护用户隐私信息，手机号、email
		userDB.setPassword("你猜猜看"); //userId/username
		String userJSON = ObjectMapperUtil.toJson(userDB);
		jedisCluster.setex(key, 7*24*3600, userJSON);
		return key;
	}
}
